"""
1394. 找出数组中的幸运数
简单
相关标签
premium lock icon
相关企业
提示
在整数数组中，如果一个整数的出现频次和它的数值大小相等，我们就称这个整数为「幸运数」。

给你一个整数数组 arr，请你从中找出并返回一个幸运数。

如果数组中存在多个幸运数，只需返回 最大 的那个。
如果数组中不含幸运数，则返回 -1 。


示例 1：

输入：arr = [2,2,3,4]
输出：2
解释：数组中唯一的幸运数是 2 ，因为数值 2 的出现频次也是 2 。
示例 2：

输入：arr = [1,2,2,3,3,3]
输出：3
解释：1、2 以及 3 都是幸运数，只需要返回其中最大的 3 。
示例 3：

输入：arr = [2,2,2,3,3]
输出：-1
解释：数组中不存在幸运数。
示例 4：

输入：arr = [5]
输出：-1
示例 5：

输入：arr = [7,7,7,7,7,7,7]
输出：7


提示：

1 <= arr.length <= 500
1 <= arr[i] <= 500
"""
from collections import Counter
from typing import List


class Solution:
    def findLucky(self, arr: List[int]) -> int:
        dict1 =  {}
        for i in range(len(arr)):
            dict1[arr[i]] = dict1.get(arr[i], 0) + 1
        max1 = -1
        for i in dict1:
            if dict1[i] == i:
                max1 = max(max1, i)
        return max1
    def findLucky_res1(self, arr: List[int]) -> int:
        cnt = Counter(arr)
        ans = -1
        for x, c in cnt.items():
            if x == c:
                ans = max(ans, x)
        return ans


if __name__ == '__main__':
    #测试方法
    print(Solution().findLucky([2,2,3,4]))
    print(Solution().findLucky_res1([2,2,3,4]))
    print(Solution().findLucky([1,2,2,3,3,3]))
    print(Solution().findLucky_res1([1,2,2,3,3,3]))
    #counter用法
    print(Counter([1,2,2,3,3,3])) #Counter({3: 3, 2: 2, 1: 1})
    print(Counter([1,2,2,3,3,3]).most_common())


    my_dict = {"key1": "value1", "key2": "value2"}
    for i in my_dict.items():
        print(i)  # ('key1', 'value1')
        print(type(i))  # tuple
    for i, j in my_dict.items():
        print(i)  # key1
        print(j)  # value1
